The Ecology Section at the USGS Conte Laboratory has studied brook trout in West Brook, a small 3rd order stream in Whately MA, since 1997.
They have observed body size variation in Young-of-the-Year (YOY) brook trout (Salvelinus fontinalis) in the fall. ( Photo above )
Knowing the mechanisms behind the body size variation are important because a larger body size increase the probability of overwinter survival and age at first reproduction. There might be an underlying strategy that allows the parents to be the drivers of the population.
What is causing the observed body size variation in YOY brook trout?
5.1 Questions
Although there are a lot of variables like, food availability, habitat, flow and temperature all influenceing body size. I want to look at it through the lenses of two variables.
What effect does growth rate have on brook trout YOY body size?
What effect does emergence date ( birth ) have on brook trout YOY body size?
7.1 Avery Brook Size Distribution vs Emergence Date (2022-07-21)
7.2 Conclusions
Brook Trout Length and Growth Rate are highly correlated.
Need an independent measure of growth rate.
Use otolith ring spacing to estimate daily growth rate.
8 Back calculation of fish size from otolith size
8.1 Steps
Determine the relationship between brook trout fork length and otolith size.
Access the daily body size estimates from ring spacing measurements.
Apply methodology to one stream from one year.
8.2 Otolith Radius vs Body Size
There is a positive relationship between otolith radius and fork length.
R Squared = 0.92
We conducted a mixed effects model analysis to determine whether the sampled stream and year could explain the variance. Unfortunately, the random effects only contributed a minimal amount to the overall variance.
8.3 Ring Spacing Methodology
A sagittal otolith is divided into four quadrants.
Posterior-Ventral
Posterior-Dorsal
Anterior-Ventral
Anterior-Dorsal
All Counting was done in the Posterior-Dorsal Quadrant.
Ring spacing is measured along a 45 degree angle in the Posterior-Dorsal Quadrant
Starting at the Posterior most primordia of the primordium.
Ending at the edge of the Otolith.
This ensures consistent measurements among samples.
Posterior-Dorsal Quadrant with Counting Line
The distance between every consecutive ring was measured starting at the edge and ending at the posterior primordium.
The distances between the consecutive rings were used to calculate the otolith radius when the ring was formed.
The otolith radius is then run through a linear equation to calculate the Fishes Fork Length for a given rings size.
Zoomed in Posterior-Dorsal Quadrant.
8.4 Error Checking
8.4.1 Ring Measuring Error
Check for reader bias.
Measure ring spacing and calculate estimated body size for Ten otolith blindly.
Compare the size estimates and calculate the percent error in them.
---title: "Yong-of-the-year (YOY) Brook Trout (*Salvelinus fontinalis*) Body Size Model"format: html: self-contained: true toc: trueeditor: visual---```{r}#| echo: false#| message: false#| warning: false#| include: false# =============# Load Packages# =============library(dygraphs)library(ggthemes)library(here)library(grid)library(lme4)library(lubridate)library(scales)library(tidyverse)library(weathermetrics)source(here::here( "DataAnalysis" , "Code" , "Functions", "themePublication.R" ))# =========# Load Data# =========setwd(here::here( "DataAnalysis" , "DataOut" , "Biological","predictedLifeEvents" ))growthRateOtolith <-readRDS( "growthRateOtolith.rds" )SizeDisModel <-readRDS( "SizeDisModel.rds" ) lifeEventsMaster <-readRDS( "lifeEventsMaster.rds" )streamFishOtolithKey <-readRDS( "streamFishOtolithKey.rds")# ============# Process Data# ============# ---------# Mean Size # ---------emergenceGrowth <- growthRateOtolith %>%group_by(slideNumber) %>%filter( lengthAtAgeBI <=20 ) %>%summarise( emergenceDate =max(date) )emergenceDate <- growthRateOtolith %>%filter( lengthAtAgeBI >19 ) %>%select( slideNumber, methodOfCapture, changeInSize ) %>%na.omit() %>%group_by( slideNumber , methodOfCapture ) %>%summarise(meanGrowth =mean(changeInSize)) %>%left_join(lifeEventsMaster, by =c('slideNumber'='slideNumber')) %>%left_join( emergenceGrowth, by =c('slideNumber'='slideNumber') ) %>%mutate( emergenceSizeDOY =yday(detectionDate),emergenceTempDOY =yday(emergenceDate),birthYear =year(detectionDate))# -----------------------# ReFormat Data For Model# -----------------------finalFork <- streamFishOtolithKey %>%select( slideNumber , forkLength) %>%rename( forkLengthFinal = forkLength ) %>%mutate( slideNumber =as.factor(slideNumber) )emergenceDateModel <- emergenceDate %>%filter( lifeEvent =="Emergence" , river %in%c("Avery Brook" , "West Whately Brook","Obear Brook" )) %>%mutate( slideNumber =as.factor(slideNumber),year =year(detectionDate)) %>%left_join( finalFork, by =c( 'slideNumber'='slideNumber'))```# Background- The Ecology Section at the USGS Conte Laboratory has studied brook trout in West Brook, a small 3rd order stream in Whately MA, since 1997.- They have observed body size variation in Young-of-the-Year (YOY) brook trout (*Salvelinus fontinalis*) in the fall. ( Photo above )- Knowing the mechanisms behind the body size variation are important because a larger body size increase the probability of overwinter survival and age at first reproduction. There might be an underlying strategy that allows the parents to be the drivers of the population.- What is causing the observed body size variation in YOY brook trout?## QuestionsAlthough there are a lot of variables like, food availability, habitat, flow and temperature all influenceing body size. I want to look at it through the lenses of two variables.1. What effect does growth rate have on brook trout YOY body size?2. What effect does emergence date ( birth ) have on brook trout YOY body size?## Study Structure- Conceptual Models- Otolith Growth Rate Methodology- Stream Data# Conceptual Model## Simulated Data::: panel-tabset### Same Emergence Date - Different Growth Rate```{r}#| echo: false#| message: false#| warning: false"Same Emergence/Diff Growth"conceptualModel <-function(mOdel, xDat, xLab){SizeDisModel %>%filter( model == mOdel ) %>%ggplot(aes_string( y ="forkLength" , x = xDat, group ="slideNumber")) +geom_point() +geom_line() +labs( x = xLab , y ="Fork Length (mm)") +theme_Publication() }conceptualModel( "Same Emergence/Diff Growth","dayofYear" ,"Emergence Date (Day of Year)" )```### Different Emergence Date - Same Growth Rate```{r}#| echo: false#| message: false#| warning: falseconceptualModel("Different Emergence/Same Growth","dayofYear" ,"Emergence Date (Day of Year)" )```### Different Emergence Date - Different Growth Rate```{r}#| echo: false#| message: false#| warning: falseconceptualModel("Mix","dayofYear" ,"Emergence Date (Day of Year)" )```:::## Simulated Data effect on Body Size::: panel-tabset### Growth Rate Vs Body Size```{r}#| echo: false#| message: false#| warning: falsecc <- SizeDisModel %>%pivot_wider( names_from = event, values_from =c(forkLength, dayofYear)) %>%mutate( y1y2 = forkLength_dateKilled-forkLength_emergence,x1x2 = dayofYear_dateKilled-dayofYear_emergence, slope = y1y2/x1x2)cc %>%ggplot(aes( y = forkLength_dateKilled, x = slope)) +geom_point() +labs( x ="Growth Rate (mm per Day)" , y ="Fork Length (mm)") +theme_Publication() +geom_smooth( method = lm, se =FALSE )+scale_colour_Publication()+facet_wrap(.~model) ```### Emergence Date Vs Body Size```{r}#| echo: false#| message: false#| warning: falsecc %>%ggplot(aes( y = forkLength_dateKilled, x = dayofYear_emergence)) +geom_point() +labs( x ="Emergence Date (Day of Year)" , y ="Fork Length (mm)") +theme_Publication() +geom_smooth( method = lm, se =FALSE )+scale_colour_Publication()+facet_wrap(.~model) rm(cc)```:::# Stream Data## Avery Brook Size Distribution vs Emergence Date (2022-07-21)```{r}#| echo: false#| message: false#| warning: false lifeEventsMaster %>%filter( river =="Avery Brook", dateKilled =="2022-07-21", lifeEvent %in%c( "DateKilled" , "Emergence")) %>%ggplot( aes( y = forkLength , x = dayOfYear,colour =as.factor(slideNumber)))+geom_point() +geom_line()+ggtitle("Avery Brook 2022/07/13") +labs( y ="Fork Length (mm)", x ="Emergence Date (Day of Year)" ,colour ="Fish Number" ) +theme_Publication()```## Conclusions1. **Brook Trout Length and Growth Rate are highly correlated.**2. **Need an independent measure of growth rate.**3. **Use otolith ring spacing to estimate daily growth rate.**# Back calculation of fish size from otolith size## Steps1. **Determine the relationship between brook trout fork length and otolith size.**2. **Access the daily body size estimates from ring spacing measurements.**3. **Apply methodology to one stream from one year.**## Otolith Radius vs Body Size```{r}#| echo: false#| message: false#| warning: falsestreamFishOtolithKey %>%ggplot(aes( y = forkLength , x = radius)) +geom_point() +labs( y ="Fork Length (mm)" ,x ="Otolith Radius (um)") +ylim( 0, 100) +xlim( 0, 800) +scale_colour_Publication() +theme_Publication() +geom_smooth(method ="lm", fullrange=TRUE)```1. **There is a positive relationship between otolith radius and fork length.** 1. **R Squared = 0.92**2. **We conducted a mixed effects model analysis to determine whether the sampled stream and year could explain the variance. Unfortunately, the random effects only contributed a minimal amount to the overall variance.**## Ring Spacing Methodology1. A sagittal otolith is divided into four quadrants. 1. Posterior-Ventral 2. Posterior-Dorsal 3. Anterior-Ventral 4. Anterior-Dorsal2. All Counting was done in the Posterior-Dorsal Quadrant.3. Ring spacing is measured along a 45 degree angle in the Posterior-Dorsal Quadrant - Starting at the Posterior most primordia of the primordium. - Ending at the edge of the Otolith.4. This ensures consistent measurements among samples.5. The distance between every consecutive ring was measured starting at the edge and ending at the posterior primordium.6. The distances between the consecutive rings were used to calculate the otolith radius when the ring was formed.7. The otolith radius is then run through a linear equation to calculate the Fishes Fork Length for a given rings size.## Error Checking### Ring Measuring Error1. Check for reader bias.2. Measure ring spacing and calculate estimated body size for Ten otolith blindly.3. Compare the size estimates and calculate the percent error in them.4. Percent Error should be below 10%.5. Two out of Ten percent error over 10%.::: panel-tabset#### Graph```{r}#| echo: false#| message: false#| warning: falseuni <- growthRateOtolith %>%filter(counts ==2, river =="Dry Brook")uni<-unique(uni$slideNumber)secondCount <- growthRateOtolith %>%filter(slideNumber %in% uni) %>%mutate(dOY =yday(date))secondCount %>%ggplot(aes( y = forkLength , x = dOY,colour =as.factor(counts))) +geom_line() +labs( y ="Fork Length (mm)" , x ="Day of Year", colour ="Count Number") +facet_wrap(.~slideNumber) +theme_Publication() +scale_colour_Publication() +theme(axis.text.x =element_text(angle =45, hjust =1))```#### Results:::# Application to Stream Data ( Avery Brook 2022)### Avery Brook Growth Rate Data Raw```{r}#| echo: false#| message: false#| warning: falseaveryGrowth <- growthRateOtolith %>%filter( river =="Avery Brook" , lengthAtAgeBI >20) averyGrowth %>%filter( methodOfCapture =="Electrofisher" ) %>%ggplot( aes( y = lengthAtAgeBI, x = date, colour =as.factor(slideNumber))) +geom_line() +labs( y ="Fork Length (mm)",x ="Date" , colour ="Fish Number" ) +scale_colour_Publication() +theme_Publication()```The next step after evaluation emergence and growth rates effects on brook trout YOY size distribution will be to look at the effects of discharge.#### Daily Growth Rate::: panel-tabset##### Electrofisher```{r}#| echo: false#| message: false#| warning: falseaveryGrowth %>%filter( methodOfCapture =="Electrofisher") %>%ggplot(aes( y = changeInSize, x = date, colour =as.factor(slideNumber))) +geom_point() +geom_line() +labs( y ="Change in Size (mm/day)" , x ="Date" ,colour ="Fish Number") +geom_smooth(method ="gam") +facet_wrap(.~forkLength) +theme_Publication() +scale_colour_Publication() ```##### Dip Net```{r}#| echo: false#| message: false#| warning: falseaveryGrowth %>%filter( methodOfCapture =="Dip Net") %>%ggplot(aes( y = changeInSize, x = date, colour =as.factor(slideNumber))) +geom_point() +geom_line() +labs( y ="Change in Size (mm/day)" , x ="Date" ,colour ="Fish Number") +geom_smooth(method ="gam") +facet_wrap(.~forkLength) +theme_Publication() +scale_colour_Publication() ```:::#### Average Growth Comparisons ( Filler Tab )::: panel-tabset##### Fork Length```{r}#| echo: false#| message: false#| warning: falseaveryBrook <- emergenceDate %>%filter( lifeEvent =="DateKilled", river %in%c( "Avery Brook" ,"West Whately Brook"))emergenceDate %>%filter(lifeEvent =="DateKilled", river %in%c( "Avery Brook","West Whately Brook")) %>%ggplot( aes( y = forkLength , x = meanGrowth,colour = river) ) +geom_point() +geom_smooth( method='lm', se=FALSE, fullrange=TRUE) +labs( y ="Fork Length (mm)", x ="Growth Rate (mm/day)" ) +theme_Publication() +facet_wrap(.~birthYear)```##### Emergence Date (Temperature)```{r}#| echo: false#| message: false#| warning: falseemergenceDateModel %>%filter(river %in%c( "Avery Brook", "West Whately Brook")) %>%ggplot(aes( x = emergenceTempDOY , y = forkLengthFinal, colour = river)) +geom_point() +geom_smooth( method ='lm', se=FALSE ) +labs( y ="Fork Length (mm)", x ="Emergence Date (Temperature)" ) +theme_Publication() +facet_wrap(methodOfCapture.x~year) ```##### Emergence Date ( Size )```{r}#| echo: false#| message: false#| warning: falseemergenceDateModel %>%filter( river =="Avery Brook" ) %>%ggplot(aes( x = emergenceSizeDOY , y = forkLengthFinal )) +geom_point() +geom_smooth( method ='lm', se=FALSE ) +labs( y ="Fork Length (mm)", x ="Emergence Date (Temperature)" ) +theme_Publication()```:::```{r}summary( lm( forkLengthFinal ~ meanGrowth , data = emergenceDateModel ))summary( lm( forkLengthFinal ~ emergenceSizeDOY , data = emergenceDateModel ))summary( lm( forkLengthFinal ~ emergenceSizeDOY , data = emergenceDateModel ))```